package com.cooqe.basefinder;

import com.alibaba.fastjson.JSONObject;
import com.cooqe.entity.ItMetric;
import com.cooqe.utils.SpringUnit;

import java.util.List;
import java.util.Map;

/**
 * @author 折戟沉沙铁未销
 * @version V1.0
 * @date 2023/11/14-2023
 * @Description: finder 基础类
 */
@SuppressWarnings("all")
public abstract class AbstractBaseFinder {

    public ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal<Map<String, Object>>();

    /**
     * xx-job 调度执行入口
     * params 是执行该 job 任务所需要的必须的参数
     * 比如：资源采集模版id
     */
    public void schedulingExecute(String params) {
        //helper
        BaseHelper baseHelper = SpringUnit.getBean(BaseHelper.class);

        //获取模版参数 (ip、端口、用户、密码等信息)
        JSONObject templateParam = baseHelper.getTemplateParam(params);

        //采集之前逻辑
        beforeCollection(templateParam);

        //真正执行采集
        doCollection(baseHelper.getMetricList(templateParam,this.getClass()));

        //清空 ThreadLocal中信息
        this.threadLocal.remove();
    }

    /**
     * 采集之前逻辑
     * 如建立 数据库连接池、建立session 会话等
     */
    public abstract void beforeCollection(JSONObject discoverParam);


    /**
     * 真正执行采集方法
     */
    public abstract void doCollection(List<ItMetric> metricList);

}